#!/usr/bin/env node
// node cli 应用的入口 必须有上面这个文件头

// 脚手架的工作过程：
// 1: 通过命令行交互询问用户问题
const inquirer = require('inquirer');
const path = require('path');
const fs = require('fs');
const ejs = require('ejs');

inquirer.prompt([
  {
    type: 'input',
    name: 'title',
    message: 'Project title?'
  },
  {
    type: 'input',
    name: 'name',
    message: 'Your name?'
  },
  {
    type: 'list',
    name: 'sex',
    message: 'Sex?',
    choices: [
      "男",
      "女"
    ],
  },
  {
    type: 'input',
    name: 'age',
    message: 'How old?',
    validate: function (val) {
      if (val.match(/\d{2}/g)) { // 校验位数
        return true;
      }
      return "请输入2位数字";
    }
  },
  {
    type: 'input',
    name: 'phone',
    message: 'Tel?',
    validate: function (val) {
      if (val.match(/\d{11}/g)) { // 校验位数
        return true;
      }
      return "请输入11位数字";
    }
  }
]).then(ans => {
  // 2、根据用户的回答结果生产文件

  // 模板目录
  const tmplDir = path.join(__dirname, '../templates');
  // 目标目录
  const destDir = process.cwd();
  // 将模板中的文件全部转移到模板目录
  fs.readdir(tmplDir, (err, files) => {
    if (err) throw err;
    files.forEach(file => {
      // 通过模板引擎去渲染对应的文件 ejs插件
      ejs.renderFile(path.join(tmplDir, file), ans, (err, result) => {
        if (err) throw err;
        // 将结果写入目标文件路径
        fs.writeFileSync(path.join(destDir, file), result);
      })
    })
  })
})